import {Timestamp, TS} from "./Timestamp.ts";

export interface UserBuff {
    id: number // 存疑，可能是操作记录id "0"
    type: UserBuffType | number | undefined // buff类型id 已知类型的buff:  [UserBuffType] "1"
    fromUserId: number // 释放buff的用户id "2"
    userId: number // 被施加buff的用户id "3"
    start: Timestamp // buff开始时间 "4"
    end: Timestamp // buff结束时间 "5"
    extraData: number // 额外数据，可能为版面id，头像buff id，或道具的subType等 "6"
    data7: number // 未知数据 "7"
    description: string // 描述 "9"
    forumName: string | undefined // 描述 "9"
}

export enum UserBuffType {
    /**
     * 权限相关
     */
    PERMISSION = 129, // "权限", null
    /**
     * 禁言
     */
    MUTED = 105, // "禁言", "全版面或单版面禁言",

    /**
     * 声望禁言
     */
    REPUTATION_MUTED = 117, // "声望禁言", "在同声望版面禁言",

    /**
     * 变羊
     */
    SHEEP = 99, // "变羊", "用户的头像应显示为羊",

    /**
     * 变企鹅
     */
    EDIART = 102, // "变企鹅", "用户的头像应显示为企鹅",

    /**
     * 匿名
     */
    ANONY = 103, // "匿名", "如果用户信息中有此buff则说明此信息是匿名发帖的假用户信息",

    /**
     * 禁制
     */
    DISABLE_BUFF = 101, // "禁制", "其他人无法对此用户使用道具 此用户也无法对其他人使用道具",

    /**
     * 头像改变
     */
    AVATAR_CHANGED = 131, // "头像改变", "具体变成什么需要看额外数据字段",
}

export const buildUserBuff = (data: any): UserBuff => {
    let description = data['9'];
    if (description && description.includes('持续至')) {
        description = description.substring(0, description.indexOf('持续至'));
    }
    const forumName = /<b>(.+?)\((.+)\)<\/b>/.exec(description)?.[1];

    return {
        id: data['0'],
        type: data['1'],
        fromUserId: data['2'],
        userId: data['3'],
        start: TS(data['4'])!!,
        end: TS(data['5'])!!,
        extraData: data['6'],
        data7: data['7'],
        description: description,
        forumName,
    }
}